]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
status/bluetooth: Clear list of connected signals on adapter changes
authorJonas Dreßler <verdre@v0yd.nl>
Thu, 24 Feb 2022 18:35:06 +0000 (19:35 +0100)
committerMarge Bot <marge-bot@gnome.org>
Sat, 26 Feb 2022 15:53:19 +0000 (15:53 +0000)
With the porting of gnome-bluetooth to the new GListModel API the
behavior regarding removing adapters changed: It now no longer
guarantees to emit "device-removed" signals for the paired devices when
the adapter gets removed.

This means we need to do that ourselves now, so clear the list of
connected signals when the default adapter changes.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2214>

js/ui/status/bluetooth.js

index 187e1063576c9ed78103646ac42ec17c3d7b57fb..5e985dd1af579de4dbf53b165a181d4a9d8a003c 100644 (file)
@@ -27,6 +27,17 @@ class Indicator extends PanelMenu.SystemIndicator {
         this._hadSetupDevices = global.settings.get_boolean(HAD_BLUETOOTH_DEVICES_SETUP);
 
         this._client = new GnomeBluetooth.Client();
+        this._client.connect('notify::default-adapter', () => {
+            const newAdapter = this._client.default_adapter ?? null;
+
+            if (newAdapter && this._adapter)
+                this._setHadSetupDevices(this._getDeviceInfos().length > 0);
+
+            this._adapter = newAdapter;
+
+            this._deviceNotifyConnected.clear();
+            this._sync();
+        });
         this._client.connect('notify::default-adapter-powered', this._sync.bind(this));
 
         this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
@@ -133,10 +144,6 @@ class Indicator extends PanelMenu.SystemIndicator {
         const connectedDevices = devices.filter(dev => dev.connected);
         const nConnectedDevices = connectedDevices.length;
 
-        if (this._client.default_adapter && this._adapter)
-            this._setHadSetupDevices(devices.length > 0);
-        this._adapter = this._client.default_adapter ?? null;
-
         let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
 
         this.menu.setSensitive(sensitive);